/**
 * 图片处理工具函数
 */

/**
 * 压缩图片
 * @param {File} file - 原始图片文件
 * @param {number} maxWidth - 最大宽度，默认300px
 * @param {number} quality - 压缩质量，0-1之间，默认0.8
 * @returns {Promise<string>} 压缩后的base64数据
 */
export const compressImage = (file, maxWidth = 300, quality = 0.8) => {
  return new Promise((resolve, reject) => {
    const canvas = document.createElement('canvas')
    const ctx = canvas.getContext('2d')
    const img = new Image()
    
    img.onload = () => {
      try {
        // 计算压缩后的尺寸
        let { width, height } = img
        if (width > maxWidth) {
          height = (height * maxWidth) / width
          width = maxWidth
        }
        
        canvas.width = width
        canvas.height = height
        
        // 绘制压缩后的图片
        ctx.drawImage(img, 0, 0, width, height)
        
        // 转换为base64
        const compressedDataUrl = canvas.toDataURL('image/jpeg', quality)
        resolve(compressedDataUrl)
      } catch (error) {
        reject(error)
      }
    }
    
    img.onerror = () => {
      reject(new Error('图片加载失败'))
    }
    
    img.src = URL.createObjectURL(file)
  })
}

/**
 * 验证图片文件
 * @param {File} file - 图片文件
 * @param {number} maxSize - 最大文件大小（字节），默认5MB
 * @returns {Object} 验证结果 {valid: boolean, message: string}
 */
export const validateImageFile = (file, maxSize = 5 * 1024 * 1024) => {
  if (!file) {
    return { valid: false, message: '请选择文件' }
  }
  
  if (!file.type.startsWith('image/')) {
    return { valid: false, message: '请选择图片文件' }
  }
  
  if (file.size > maxSize) {
    const maxSizeMB = Math.round(maxSize / (1024 * 1024))
    return { valid: false, message: `图片大小不能超过${maxSizeMB}MB，请选择更小的图片` }
  }
  
  return { valid: true, message: '' }
}

/**
 * 获取图片预览URL
 * @param {File} file - 图片文件
 * @returns {string} 预览URL
 */
export const getImagePreviewUrl = (file) => {
  return URL.createObjectURL(file)
}

/**
 * 释放图片预览URL
 * @param {string} url - 预览URL
 */
export const revokeImagePreviewUrl = (url) => {
  URL.revokeObjectURL(url)
}